package com.aaron.proxystudy.jdkProxy;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @ClassName MyInvocationHandler
 * @description:
 * @author: 荣燊
 * @create: 2021-05-18 15:32
 **/
public class MyInvocationHandler implements InvocationHandler {
    private final Object target;

    public MyInvocationHandler(Object target) {
        this.target = target;
    }

    //参数o:代理类代理的 真实的代理对象（其实就是那个接口的实现类）
    //参数method:需要调用的方法
    //参数objects:代理对象方法需要的参数
    @Override
    public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
        //调用方法之前，可以在这里做一些处理
        System.out.println("before send:"+method.getName());
        System.out.println(method.getDeclaringClass());
        System.out.println(method.getReturnType());

        //代理方法调用
        Object result = method.invoke(target, objects);

        //调用方法之后，有可以扩展一些处理
        System.out.println("after send:"+o.getClass());
        return result;
    }
}
